package com.tabnet.form;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.tabnet.beans.gammeproduit.AppelOffre;
import com.tabnet.dao.DAOAppelOffre;
import com.tabnet.dao.DAOException;

public class ModificationAppelOffreForm {
    private static final String CHAMP_DESCRIPTION    = "description";

    private String              resultat;
    private Map<String, String> erreurs        = new HashMap<String, String>();
    private DAOAppelOffre       appelDao;
    
    public ModificationAppelOffreForm( DAOAppelOffre appelDao ) {
        this.appelDao = appelDao;
    }

    public Map<String, String> getErreurs() {
    return erreurs;
    }

    public String getResultat() {
        return resultat;
    }

    /**
     * Méthode qui modifie les données de l'appel d'offre.
     * Si aucune erreur, les données du fournisseur sont modifiées dans la base de données
     * sinon le fournisseur doit corriger les erreurs.
     * @param request
     * @param fournisseur
     * @return Fournisseur
     */
    public AppelOffre modifierAppelOffre( HttpServletRequest request, AppelOffre appel ) {
    	
    	// récupération des valeurs
        String description = getValeurChamp( request, CHAMP_DESCRIPTION );

        // les tests de validation des données
        traiterDescription(description, appel);

        try {
            if ( erreurs.isEmpty() ) {
            	appelDao.updAppelOffre(appel);
                resultat = "Succès de la modification de l'appel d'offre.";
            } else {
                resultat = "Échec de la modification de l'appel d'offre.";
            }
        } catch ( DAOException e ) {
            setErreur( "imprévu", "Erreur imprévue lors de la modification." );
            resultat = "Échec de la modification de l'appel d'offre. : une erreur imprévue est survenue, merci de réessayer dans quelques instants.";
            e.printStackTrace();
        }

        return appel;
    }
    
    // les traitements
    private void traiterDescription( String description, AppelOffre appel ) {
        try {
            validationDesc(description);
        } catch ( Exception e ) {
            setErreur( CHAMP_DESCRIPTION, e.getMessage() );
        }
        appel.setDescription(description);
    }
    
    private void validationDesc( String description ) throws FormValidationException {
        if ( description == null) {
            throw new FormValidationException( "Merci d'entrer une description." );
        }
    }
    
    /*
     * Ajoute un message correspondant au champ spécifié à la map des erreurs.
     */
    private void setErreur( String champ, String message ) {
        erreurs.put( champ, message );
    }

    /*
     * Méthode utilitaire qui retourne null si un champ est vide, et son contenu
     * sinon.
     */
    private static String getValeurChamp( HttpServletRequest request, String nomChamp ) {
        String valeur = request.getParameter( nomChamp );
        if ( valeur == null || valeur.trim().length() == 0 ) {
            return null;
        } else {
            return valeur;
        }
    }
}
